#ifndef INPUTTEXTEDIT_H
#define INPUTTEXTEDIT_H

#include "pinyinhandler.h"  			// 拼音解析
#include "candidatewindow.h"            // 候选词窗口
#include "userdict.h"        			// 自定义词库（自动造词）

#include <QTextEdit>
#include <QTimer>

class InputTextEdit : public QTextEdit
{
    Q_OBJECT

public:
    static InputTextEdit* getInstance(QWidget *parent = nullptr); // 单例
    ~InputTextEdit() override;

	// out ctrl candidate
	void hideCandidateWindow();

protected:
    // 事件重写
    void keyPressEvent(QKeyEvent *event) override;    // 键盘输入解析
    void focusInEvent(QFocusEvent *event) override;   // 焦点恢复显示候选词
    void focusOutEvent(QFocusEvent *event) override;  // 焦点丢失隐藏候选词
    void textChanged() override;                      // 文本变化触发简繁实时转换

private slots:
    // 候选词选中插入
    void onCandidateSelected(const QString &text);
    // 自动造词检测（延迟触发）
    void onAutoAddWordCheck();

private:
	explicit InputTextEdit(QWidget *parent = nullptr); // 私有构造（单例）
    static InputTextEdit *m_instance;                  // 单例实例

    // 核心依赖
    PinyinHandler *m_pinyinHandler;       // 拼音解析器
    CandidateWindow *m_candidateWindow;   // 候选词窗口
    InputContext *m_inputContext;         // 输入模式管理
    UserDict *m_userDict;                 // 自定义词库

    // 状态变量
    QString m_currentPinyin;              // 当前输入的拼音串（如“chongq”）
    QTimer m_autoAddWordTimer;            // 自动造词检测计时器（延迟1.5秒）
    QString m_pendingWord;                // 待检测的未收录词

};

#endif	// INPUTTEXTEDIT_H